/*
 * Klasse, die das Loginfenster abbildet
 * 
 */

package com.rss.app;

import com.logic.reader;
import com.mysql.mysqlUser;
import com.objects.user;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Window;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author Dell
 */
public class log_window extends Window{

    //globale Variable des Textfeldes für den Username
    private TextField userField = new TextField();
    //globale Variable des Textfeldes für das Passwort
    private TextField passField = new TextField();
    //Instanz der aktiven Applikation
    private rss_reader rssreader;

    public log_window(rss_reader r)
    {
        //Übergabe der Applikationsinstanz
        rssreader = r;
        //Fenster wird modal gesetzt (keine anderen Elemente der Applikation sind ausführbar, bis auf das Fenster)
        this.setModal(true);
        //Höhe und Breite des Fensters setzen
        this.setWidth("250px");
        this.setHeight("250px");
        //Fenster unschließbar setzen
        this.setClosable(false);
        //Label für die Überschrift erstellen
        Label logText = new Label("<h3>Bitte einloggen!</h3>",Label.CONTENT_XHTML);
        //Label dem Fenster als Komponente inzufügen
        this.addComponent(logText);
        //Label für die Bezeichnung des Benutzernametextfeldes erstellen
        Label userText = new Label("Username: ");
        //Label dem Fenster als Komponente hinzufügen
        this.addComponent(userText);
        //Textfeld für den Benutzernamen als Komponente hinzufügen
        this.addComponent(userField);
        //Label für die Bezeichnung des Passworttextfeldes erstellen
        Label passText = new Label("Passwort: ");
        //Label dem Fenster als Komponente hinzufügen
        this.addComponent(passText);
        //Passworttextfeld secret setzen (Eingabezeichen nicht sichtbar)
        passField.setSecret(true);
        //Passworttextfeld als Komponente hinzufügen
        this.addComponent(passField);
        //Login Button erstellen
        Button logBtn = new Button("login");
        //Login Button einen Clicklistener hinzufügen
        logBtn.addListener(new Button.ClickListener() {
            //Funktion des Clicklisteners
            public void buttonClick(ClickEvent event) {
                try {
                    //Login testen
                    checkLogin();
                } catch (Exception ex) {
                    Logger.getLogger(log_window.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        //Login Button als Komponente hinzufügen
        this.addComponent(logBtn);
    }

    //Funktion, die den Login testet
    public void checkLogin() throws Exception
    {
        //wenn die entsprechende DB-Funktion true zurückliefert
        if (mysqlUser.checkLogin(userField.getValue().toString(), passField.getValue().toString()))
        {
            //erstelle temporäres Userobjekt mit den Userdaten aus der Datenbank
            user temp =mysqlUser.getUserByUsername(userField.getValue().toString());
            //Aktualisiere die Feeds des Users
            reader read = new reader(temp.getUserid());
            read.updateFeeds();
            //übergib den User an die Hauptapplikation
            rssreader.setUser(temp);
            //Fülle den Feed-Baum auf der linken Seite mit den Daten des Users
            rssreader.fillTree();
            //schließe dieses Fenster
            this.close();
        }
        //sonst
        else
        {
            //gebe eine Fehlermeldung aus
             this.getWindow().showNotification(
                                (String) "Loginfehler",
                                (String) "Benutzername und/oder Passwort falsch",
                                Notification.TYPE_ERROR_MESSAGE);
        }

    }
}
